<html><head><title>Changes</title></head>
<body bgcolor="#FFFFDF" link="#009999" vlink="#006666" alink="#006666">
<font face="Arial" size="2"><p align="center"><b><font size="5">Changes</font></b></p>

<b>Changes by libraries from v3.94 to v4.00</b> 

<p><b>Image</b></p><blockquote>


<font color="red">removed</font>: UseImage() - change UseImage(#Image) to ImageID(#Image) where just the ID is needed. <br>
<br>
<font color="green">added</font>: CreateImage(#Image, Width, Height [, Depth]) - New Parameter <br>
<font color="green">added</font>: LoadImage(#Image, Filename$ [, Flags]) - New Parameter <br>
<font color="green">added</font>: CatchImage(#Image, Filename$ [, Length [, Flags]]) - New Parameters <br>
<br>
<font color="orange">changed</font>: ImageDepth(#Image)        - new parameter <br>
<font color="orange">changed</font>: ImageHeight(#Image)       - new parameter <br>
<font color="orange">changed</font>: ImageWidth(#Image)        - new parameter <br>
<font color="orange">changed</font>: ImageID(#Image)           - new parameter <br>
<font color="orange">changed</font>: ImageOutput(#Image)       - new parameter <br>


</blockquote>
<p><b>String</b></p><blockquote>


<font color="green">added</font>: StrD(Number [, NbDecimals]) <br>
<font color="green">added</font>: StrQ() <br>
<font color="green">added</font>: HexQ() <br>
<font color="green">added</font>: BinQ() <br>
<font color="green">added</font>: StrU(): added a #PB_Quad flag <br>
<font color="green">added</font>: ValD(), ValQ() <br>
<font color="green">added</font>: StringByteLength() - to calculate the needed length of a string in the different encoding supported by PureBasic 


</blockquote>
<p><b>Math</b></p><blockquote>


<font color="green">added</font>: IntQ() 


</blockquote>
<p><b>Thread</b></p><blockquote>


<font color="green">added</font>: IsThread(Thread)    - test if thread (still) exists. <br>
<font color="green">added</font>: CreateMutex()       - create a mutex object <br>
<font color="green">added</font>: FreeMutex(Mutex)    - destroy the object <br>
<font color="green">added</font>: LockMutex(Mutex)    - wait until mutex is available and lock it <br>
<font color="green">added</font>: TryLockMutex(Mutex) - lock mutex if available, otherwise return 0 immediately <br>
<font color="green">added</font>: UnlockMutex(Mutex)  - unlock the mutex so other threads can lock it <br>


</blockquote>
<p><b>Process (New)</b></p><blockquote>


<font color="green">added</font>: GetEnvironmentVariable(Name$)         - get value of an en var <br>
<font color="green">added</font>: SetEnvironmentVariable(Name$, Value$) - set the value <br>
<font color="green">added</font>: RemoveEnvironmentVariable(Name$)      - delete environment variable <br>
<font color="green">added</font>: ExamineEnvironmentVariables()         - examine the currently set env variables <br>
<font color="green">added</font>: NextEnvironmentVariable()             - get the next variable <br>
<font color="green">added</font>: EnvironmentVariableName()             - get the variable name <br>
<font color="green">added</font>: EnvironmentVariableValue()            - get the variable value <br>
<font color="green">added</font>: ProgramName()               - get full path to executable <br>
<font color="green">added</font>: CountProgramParameters()    - get parameters count <br>
<font color="green">added</font>: IsProgram(Program)          - check if Program is a valid program created with RunProgram <br>
<font color="green">added</font>: ProgramID(Program)          - get the ProcessID of the program <br>
<font color="green">added</font>: ProgramRunning(Program)     - returns 1 if the program is still running <br>
<font color="green">added</font>: WaitProgram(Program [, Timeout])  - waits for the program to quit (with optional timeout) returns 1 if the program has ended <br>
<font color="green">added</font>: KillProgram(Program)        - forcibly terminates the program <br>
<font color="green">added</font>: ProgramExitCode(Program)    - get the exitcode of the program (only valid after program has ended) <br>
<font color="green">added</font>: CloseProgram(Program)       - close the interaction with the program <br>
<font color="green">added</font>: AvailableProgramOutput(Program)         - returns the number of bytes available for reading <br>
<font color="green">added</font>: ReadProgramString(Program)              - read a string from the program output <br>
<font color="green">added</font>: ReadProgramData(Program, *Buffer, size) - read data from the output <br>
<font color="green">added</font>: ReadProgramError(Program)               - read a message from STDERR <br>
<font color="green">added</font>: WriteProgramString(Program, String$)    - write to the programs input (string) <br>
<font color="green">added</font>: WriteProgramData(Program, *Buffer, size)- write data to the programs input <br>
<br>
<font color="orange">changed</font>: ProgramParameter([Index])   - get next (or at position index) parameter <br>
<font color="orange">changed</font>: RunProgram() with new Flags: 
<pre><font face="Courier New, Courier, mono"size="2">  #PB_Program_Open    - open the program communicate/get information
  #PB_Program_Read    - allow to read the programs output (STDOUT)
  #PB_Program_Write   - allow to write to the programs input (STDIN)
  #PB_Program_Error   - allow to catch messages on standard error (STDERR)
  #PB_Program_Connect - connect another program's output to this program's input
</font></pre>



</blockquote>
<p><b>File</b></p><blockquote>


<font color="green">added</font>: FileBuffersSize(#File, Size) - Change the size of the buffers for the specified file. <br>
<font color="green">added</font>: FileID(#File) - Returns the unique ID which identifies the file in the operating system. <br>
<font color="green">added</font>: FlushFileBuffers(#File) - Ensures all buffered operations are written to disk. <br>
<font color="green">added</font>: ReadChar(#File) <br>
<font color="green">added</font>: ReadQuad(#File) <br>
<font color="green">added</font>: ReadDouble(#File) <br>
<font color="green">added</font>: WriteChar(#File, Value) <br>
<font color="green">added</font>: WriteQuad(#File, Value) <br>
<font color="green">added</font>: WriteDouble(#File, Value) <br>
<font color="green">added</font>: ReadStringFormat(#File) <br>
<font color="green">added</font>: WriteStringFormat(#File, Format) <br>

<br>
<font color="orange">changed</font>: FileSeek(#File, NewPosition)   - new parameter <br>
<font color="orange">changed</font>: WriteData(#File)               - new parameter <br>
<font color="orange">changed</font>: ReadData(#File)                - new parameter <br>
<font color="orange">changed</font>: Lof(#File)                     - new parameter <br>
<font color="orange">changed</font>: Loc(#File)                     - new parameter <br>
<font color="orange">changed</font>: ReadByte(#File)                - new parameter <br>
<font color="orange">changed</font>: ReadWord(#File)                - new parameter <br>
<font color="orange">changed</font>: ReadLong(#File)                - new parameter <br>
<font color="orange">changed</font>: ReadFloat(#File)               - new parameter <br>
<font color="orange">changed</font>: ReadString(#File [,Format])    - new parameter <br>
<font color="orange">changed</font>: ReadData(#File)                - new parameter <br>
<font color="orange">changed</font>: WriteByte(#File, Data)         - new parameter <br>
<font color="orange">changed</font>: WriteWord(#File, Data)         - new parameter <br>
<font color="orange">changed</font>: WriteLong(#File, Data)         - new parameter <br>
<font color="orange">changed</font>: WriteFloat(#File, Data)        - new parameter <br>
<font color="orange">changed</font>: WriteString(#File, Data [,Format])       - new parameter <br>
<font color="orange">changed</font>: WriteStringN(#File, Data [,Format])      - new parameter <br>
<font color="orange">changed</font>: WriteData(#File, Data, Length) - new parameter <br>
<br>
<font color="red">removed</font>: UseFile()                - change UseFile(#File) to FileID(#File) where just the ID is needed. <br>


</blockquote>
<p><b>2DDrawing</b></p><blockquote>


<font color="green">added</font>: DrawAlphaImage() <br>
<font color="green">added</font>: TextHeight(Text$)     - returns the height required for the string with the current drawing font/output <br>
<font color="green">added</font>: FillArea(x, y, BorderColor [, Color]) - if BorderColor = -1, it fills the area with the same color as on (x,y) <br>
<br>
<font color="orange">changed</font>: FrontColor(Color)     - joined the red, green, blue to only one color value. (add RGB() for a quick adjustment of old code) <br>
<font color="orange">changed</font>: BackColor(Color)      - joined the red, green, blue to only one color value. <br>
<font color="orange">changed</font>: NewX = DrawText(x, y, Text$ [, FrontColor [, BackColor]]) - added x/y coordinates and optional color values <br>
<font color="orange">changed</font>: TextLength(Text$) -&#062; TextWidth(Text$) - renamed <br>
<br>
<font color="red">removed</font>: Locate(x, y)   - no longer useful. 


</blockquote>
<p><b>Palette</b></p><blockquote>


<font color="red">removed</font>: UsePalette() <br>
<br>
<font color="orange">changed</font>: GetPaletteColor(#Palette, Index)        - new Parameter <br>
<font color="orange">changed</font>: SetPaletteColor(#Palette, Index, Color) - new Parameter 


</blockquote>
<p><b>Module</b></p><blockquote>


<font color="orange">changed</font>: SetModulePosition(#Module, Position)    - new Parameter <br>
<font color="orange">changed</font>: GetModulePosition(#Module)    - new Parameter <br>
<font color="orange">changed</font>: GetModuleRow(#Module)    - new Parameter <br>
<font color="orange">changed</font>: StopModule(#Module)    - new Parameter and -1 = stop all the modules 


</blockquote>
<p><b>Database</b></p><blockquote>


<font color="orange">changed</font>: FirstDatabaseRow(#Database)    - new Parameter <br>
<font color="orange">changed</font>: PreviousDatabaseRow(#Database) - new Parameter <br>
<font color="orange">changed</font>: NextDatabaseRow(#Database)     - new Parameter <br>
<font color="orange">changed</font>: GetDatabaseLong(#Database)     - new Parameter <br>
<font color="orange">changed</font>: GetDatabaseFloat(#Database)    - new Parameter <br>
<font color="orange">changed</font>: GetDatabaseString(#Database)   - new Parameter <br>
<font color="orange">changed</font>: DatabaseUpdate(#Database, Query$) - new Parameter <br>
<font color="orange">changed</font>: DatabaseQuery(#Database, Query$) - new Parameter <br>
<font color="orange">changed</font>: DatabaseColumnType(#Database, Column) - new Parameter <br>
<font color="orange">changed</font>: DatabaseColumns(#Database) - new Parameter <br>
<font color="orange">changed</font>: DatabaseColumnName(#Database, Column) - new Parameter <br>
<br>
<font color="red">removed</font>: UseDatabase() <br>


</blockquote>
<p><b>Movie</b></p><blockquote>


<font color="orange">changed</font>: MovieAudio(#Movie)        - new Parameter <br>
<font color="orange">changed</font>: MovieHeight(#Movie)       - new Parameter <br>
<font color="orange">changed</font>: MovieWidth(#Movie)        - new Parameter <br>
<font color="orange">changed</font>: MovieInfo(#Movie)         - new Parameter <br>
<font color="orange">changed</font>: MovieLength(#Movie)       - new Parameter <br>
<font color="orange">changed</font>: RenderMovieFrame(#Movie)  - new Parameter <br>
<font color="orange">changed</font>: ResizeMovie(#Movie, x, y, Width, Height) - new Parameter <br>
<font color="orange">changed</font>: ResumeMovie(#Movie)       - new Parameter <br>
<font color="orange">changed</font>: PauseMovie(#Movie)        - new Parameter <br>
<font color="orange">changed</font>: StopMovie(#Movie)         - new Parameter <br>
<font color="orange">changed</font>: MovieSeek(#Movie, Position) - new Parameter <br>
<font color="orange">changed</font>: MovieStatus(#Movie)       - new Parameter <br>
<br>
<font color="red">removed</font>: UseMovie() 



</blockquote>
<p><b>FileSystem</b></p><blockquote>


<font color="green">added</font>: FinishDirectory(#Directory) <br>
<font color="green">added</font>: DirectoryEntryType(#Directory) <br>
<font color="green">added</font>: DirectoryEntryDate(#Directory, DateType) - #PB_Date_Created, #PB_Date_Accessed, #PB_Date_Modified <br>
<font color="green">added</font>: GetFileDate(Filename$, DataType) <br>
<font color="green">added</font>: SetFileDate(Filename$, DataType) <br>
<br>
<font color="orange">changed</font>: NextDirectoryEntry(#Directory)  - new Parameter <br>
<font color="orange">changed</font>: DirectoryEntryName(#Directory)  - new Parameter <br>
<font color="orange">changed</font>: DirectoryEntryAttributes(#Directory) - new Parameter <br>
<font color="orange">changed</font>: DirectoryEntrySize(#Directory)       - new Parameter <br>
<br>
<font color="blue">renamed</font>: IsFilename() to CheckFilename()      - function name changed <br>
<br>
<font color="red">removed</font>: UseDirectory() <br>
<br>
Important notes: NextDirectoryEntry() no longer returns the type of entry (file/type). To be consistent 
with other Examine...()/Next...() functions in PB, it now only returns 0 or 1 (0 means no more objects). 
Use DirectoryEntryType() to find out the type of entry like you did before with the result of NextDirectoryEntry(). 
FinishDirectory() has to be called after each ExamineDirectory(). 


</blockquote>
<p><b>Menu</b></p><blockquote>


<font color="green">added</font>: GetMenuItemText(#Menu, ItemID) <br>
<font color="green">added</font>: GetMenuTitleText(#Menu, ItemID) <br>
<font color="green">added</font>: SetMenuItemText(#Menu, ItemID, Text$) <br>
<font color="green">added</font>: SetMenuTitleText(#Menu, ItemID, Text$) <br>
<br>
<font color="orange">changed</font>: DisableMenuItem(#Menu, ItemID, State)  - new Parameter <br>
<font color="orange">changed</font>: MenuID(#Menu)  - new Parameter 


</blockquote>
<p><b>Console</b></p><blockquote>


<font color="green">added</font>: EnableGraphicalConsole(State) <br>
<font color="green">added</font>: RawKey() <br>
<font color="green">added</font>: Redirection and standard output support <br>
<br>
<font color="orange">changed</font>: Inkey()  - now returns only 1 char or nothing (instead of always 2), use RawKey() for the extra character <br>
<br>
Note: the old console lib used a graphical console mode, which did not output to stdout correctly. 
(you could not call it from command-line like: myprogram.exe &#062; test.txt) 
Now you have the choice with EnableGraphicalConsole(State), and if you do 
not explicitly set the graphical mode, the printed stuff should be properly sent to stdout, enabling 
you to write better console tools. This also applies to stdin and the Input() command. 


</blockquote>
<p><b>AudioCD</b></p><blockquote>


<font color="orange">changed</font>: all function name from 'CDAudio' to 'AudioCD' (less french-english..) 


</blockquote>
<p><b>Toolbar</b></p><blockquote>


<font color="green">added</font>: ToolBarHeight(#ToolBar) <br>
<font color="green">added</font>: ToolBarID(#ToolBar) <br>
<br>
<font color="orange">changed</font>: ToolBarTooltip(#ToolBar, Button, Text$) - New parameter <br>
<font color="orange">changed</font>: DisableToolBarButton(#ToolBar, Button, State) - New parameter 


</blockquote>
<p><b>Statusbar</b></p><blockquote>


<font color="green">added</font>: StatusBarHeight(#StatusBar) <br>
<font color="green">added</font>: StatusBarID(#StatusBar) 


</blockquote>
<p><b>Font</b></p><blockquote>


<font color="orange">changed</font>: FontID(#Font) - New parameter <br>
<font color="orange">changed</font>: CloseFont() to FreeFont() <br>
<br>
<font color="red">removed</font>: UseFont() 

</blockquote>
<p><b>Preferences</b></p><blockquote>


<font color="green">added</font>: ability to add/change/delete keys to existing prefs files. <br>
<font color="green">added</font>: RemovePreferenceKey(Name$) <br>
<font color="green">added</font>: RemovePreferenceGroup(Name$) <br>
<font color="green">added</font>: ExaminePreferenceGroups() - get all the group names in the file <br>
<font color="green">added</font>: NextPreferenceGroup()     - go to the next group name. (the group will be set as the current one) <br>
<font color="green">added</font>: PreferenceGroupName()     - get the group name.  <br>
<font color="green">added</font>: ExaminePreferenceKeys()   - get all key names in the current group <br>
<font color="green">added</font>: NextPreferenceKey()       - go to the next key. <br>
<font color="green">added</font>: PreferenceKeyName()       - get key name <br>
<font color="green">added</font>: ReadPreferenceQuad(Key$, Default) <br>
<font color="green">added</font>: ReadPreferenceDouble(Key$, Default) <br>
<font color="green">added</font>: WritePreferenceQuad(Key$, Value) <br>
<font color="green">added</font>: WritePreferenceDouble(Key$, Value) 



</blockquote>
<p><b>Sprite</b></p><blockquote>


<font color="green">added</font>: SpriteID(#Sprite) <br>
<font color="green">added</font>: FlipBuffer() - added a flag, to have a CPU optimized synchro in fullscreen mode <br>
<br>
<font color="blue">renamed</font>: DisplayTranslucideSprite() to DisplayTranslucentSprite() <br>
<br>
<font color="orange">changed</font>: TransparentSpriteColor(#Sprite, R, G, B) to TransparentSpriteColor(#Sprite, Color) <br>
<font color="orange">changed</font>: ClearScreen(R, G, B) to ClearScreen(Color) 


</blockquote>
<p><b>Library</b></p><blockquote>


<font color="blue">renamed</font>: IsFunction() -&#062; GetFunction() 



</blockquote>
<p><b>Network</b></p><blockquote>


<font color="green">added</font>: UDP support trough the flags #PB_Network_UDP and #PB_Network_TCP <br>
<font color="green">added</font>: GetClientIP() <br>
<font color="green">added</font>: GetClientPort() <br>
<font color="green">added</font>: EventServerNumber() <br>
<br>
<font color="blue">renamed</font>: NetworkClientID() -&#062; EventClient() 


</blockquote>
<p><b>Keyboard</b></p><blockquote>


<font color="green">added</font>: #PB_Keyboard_International and #PB_Keyboard_AllowSystemKeys flags to KeyboardMode() 


</blockquote>
<p><b>Clipboard</b></p><blockquote>


<font color="orange">changed</font>: GetClipboardData(Type) to GetClipboardImage(#Image) <br>
<font color="orange">changed</font>: SetClipboardData(Type, Data) to SetClipboardImage(#Image) 


</blockquote>
<p><b>Memory</b></p><blockquote>


<font color="green">added</font>: Unicode conversion support to PeekS() and PokeS() between ascii, UTF8 and UTF16 <br>
<font color="green">added</font>: PeekC(), PeekD(), PeekQ() <br>
<font color="green">added</font>: PokeC(), PokeD(), PokeQ() <br>
<font color="green">added</font>: MemorySize() - return size of a memory block <br>
<font color="green">added</font>: MoveMemory() <br>
<font color="green">added</font>: CompareMemoryString(*Text1, *Test2 [Mode [, MaxLength [, Flags]]]) - New flags parameter for UTF16/UTF8/Ascii compare <br>
<font color="green">added</font>: MemoryStringLength() - New flags parameter for UTF16/UTF8/Ascii support <br>
<br>
Note: The commands PeekS, PokeS, CompareMemoryString, MemoryStringLength now have a parameter that specifies the string format. 
Possible options are: #PB_Ascii, #PB_Unicode or #PB_UTF8. This allows you do work with strings in memory 
independent of the actual String mode the executable was compiled with (unicode or not). 


</blockquote>
<p><b>Engine3D</b></p><blockquote>


<font color="orange">changed</font>: CreateMesh(#Mesh, MaximumVertex) - new parameter <br>
<font color="orange">changed</font>: MaterialAmbientColor(#Matrix1, -1) - -1 new parameter <br>
<br>
<font color="green">added</font>: EntityRenderMode() <br>
<font color="green">added</font>: WorldShadows(#PB_Shadow_Additive)  <br>
<font color="green">added</font>: ParticleEmitterDirection() <br>
<font color="green">added</font>: GetEntityMass <br>
<font color="green">added</font>: SetEntityMass <br>
<font color="green">added</font>: GetEntityFriction <br>
<font color="green">added</font>: SetEntityFriction <br>
<font color="green">added</font>: EntityPhysicBody <br>
<font color="green">added</font>: ExamineWorldCollisions <br>
<font color="green">added</font>: NextWorldCollision <br>
<font color="green">added</font>: CheckWorldCollisionEntity <br>
<font color="green">added</font>: FirstWorldCollisionEntity <br>
<font color="green">added</font>: SecondWorldCollisionEntity <br>
<font color="green">added</font>: WorldGravity <br>
<font color="green">added</font>: EnableWorldCollision <br>
<font color="green">added</font>: EnableWorldPhysics <br>
<font color="green">added</font>: Parse3DScripts <br>
<br>
<font color="red">removed</font>: RotateParticleEmitter() (was useless for now) <br>


</blockquote>
<p><b>Window</b></p><blockquote>


<font color="green">added</font>: GetActiveWindow()       - returns the Window with the focus <br>
<font color="green">added</font>: DisableWindow(#Window, State) - disable user input to a window <br>
<font color="green">added</font>: GetWindowState(#Window)       - get minimized/maximized state <br>
<font color="green">added</font>: SetWindowState(#Window, State)- set minimized/maximized state <br>
<font color="green">added</font>: StickyWindow(#Window, State)  - make the window stay on top of all others even if disabled <br>
<font color="green">added</font>: SetWindowColor(#Window, Color)- set background color of the window <br>
<font color="green">added</font>: GetWindowColor(#Window)       - get the current background color of the window <br>
<font color="green">added</font>: SmartWindowRefresh(#Window, State) - enable or disable the smart refresh feature <br>
<br>
<font color="orange">changed</font>: OpenWindow(#Window, x, y, Width, Height, Title$ [, Flags [, ParentID]]) - flags are now at the end and optionals <br>
<font color="orange">changed</font>: WaitWindowEvent([Timeout])                  - added optional timeout value <br>
<font color="orange">changed</font>: ResizeWindow(#Window, x, y, width, height)  - '-1' parameters must be changed to #PB_Ignore <br>
<font color="orange">changed</font>: SetWindowCallback(@procedure() [, #Window]) - added optional window parameter (to set callback for 1 window only) <br>
<font color="orange">changed</font>: ResizeWindow(#Window, x, y, Width, Height) - now same as ResizeGadget() <br>
<font color="orange">changed</font>: WindowID(#Window)       - parameter no longer optional <br>
<font color="orange">changed</font>: WindowHeight(#Window)   - new parameter <br>
<font color="orange">changed</font>: WindowWidth(#Window)    - new parameter <br>
<font color="orange">changed</font>: WindowX(#Window)        - new parameter <br>
<font color="orange">changed</font>: WindowY(#Window)        - new parameter <br>
<font color="orange">changed</font>: WindowMouseX(#Window)   - new parameter <br>
<font color="orange">changed</font>: WindowMouseY(#Window)   - new parameter <br>
<font color="orange">changed</font>: WindowOutput(#Window)   - new parameter <br>
<br>
<font color="blue">renamed</font>: EventWindowID() to EventWindow() <br>
<font color="blue">renamed</font>: EventGadgetID() to EventGadget() <br>
<font color="blue">renamed</font>: EventMenuID()   to EventMenu() <br>
<font color="blue">renamed</font>: ActivateWindow() to SetActiveWindow(#Window) <br>
<br>
<font color="red">removed</font>: MoveWindow() <br>
<font color="red">removed</font>: DetachMenu() <br>
<font color="red">removed</font>: UseWindow() <br>
<font color="red">removed</font>: Compatibility constants like #PB_EventCloseWindow (use the documented #PB_Event_CloseWindow instead) <br>


</blockquote>
<p><b>Gadget</b></p><blockquote>


<font color="green">added</font>: GetActiveGadget()      - returns the currently active Gadget <br>
<font color="green">added</font>: GadgetType(#Gadget) - returns a constant that identifies what kind of Gadget this is <br>
<font color="green">added</font>: SetGadgetData(#Gadget, Value) - associate a value with the Gadget (works for all Gadgets.) <br>
<font color="green">added</font>: GetGadgetData(#Gadget)        - read the associated value <br>
<font color="green">added</font>: SetGadgetItemData(#Gadget, Item, Value) - associate value with gadget item (works for specific gadgets only) <br>
<font color="green">added</font>: GetGadgetItemData(#Gadget, Item) <br>
<font color="green">added</font>: SetGadgetColor(#Gadget, ColorType, Color) <br>
<font color="green">added</font>: GetGadgetColor(#Gadget, ColorType) <br>
<font color="green">added</font>: SetGadgetItemColor(#Gadget, Item, ColorType, color [, Column]) <br>
<font color="green">added</font>: GetGadgetItemColor(#Gadget, Item, ColorType [, Column]) <br>
<br>
<font color="orange">changed</font>: ActivateGadget(#Gadget) is now SetActiveGadget(#Gadget) <br>
<font color="orange">changed</font>: ResizeGadget(#Gadget, x, y, width, height), -1 should now be changed to #PB_Ignore <br>
<br>
<font color="red">removed</font>: #PB_String_MultiLine 
<br>
<br>


</blockquote>
<p><b>Individual Gadget changes:</b></p><blockquote>


<b>CalendarGadget()</b> <br>
- supports SetGadgetColor() with the following colortypes: <br>
<blockquote>

#PB_Gadget_BackColor       - background <br>
#PB_Gadget_FrontColor      - text to display days <br>
#PB_Gadget_TitleBackColor  - background of month title <br>
#PB_Gadget_TitleFrontColor - text color of month title <br>
#PB_Gadget_GreyTextColor   - color for days not of the current month <br>
</blockquote>

<br>

<b>ComboBoxGadget()</b> <br>
- Supports SetGadgetItemData() <br>
<br>

<b>ContainerGadget()</b> <br>
- supports SetGadgetColor() for backcolor <br>
<br>

<b>DateGadget()</b> <br>
- supports SetGadgetColor() with the same values as CalendarGadget to color the drop-down calendar <br>
- the input area can not be colored at this time <br>
<br>

<b>EditorGadget()</b> <br>
- supports SetGadgetColor for front & backcolor <br>
- new Flag: #PB_Editor_ReadOnly  <br>
- supports SetGadgetAttribute() with #PB_Editor_ReadOnly to get/set the read-only flag <br>
<br>

<b>ExplorerListGadget()</b> <br>
- supports SetGadgetColor() for front & backcolor & #PB_Gadget_LineColor <br>
- Supports GetGadgetItemAttribute(#Gadget, 0, #PB_Explorer_ColumnWidth, 2) ; return width of column 2 <br>
- Supports SetGadgetItemAttribute(#Gadget, 0, #PB_Explorer_ColumnWidth, 100, 2) ; set width of column 2 to 100 <br>
- Supports GetGadgetItemText(#Gadget, -1, 2)             ; return header text for column 2 <br>
- Supports SetGadgetItemText(#Gadget, -1, "New Text", 2) ; change header text for column 2 <br>
<br>

<b>ExplorerTreeGadget()</b> <br>
- supports SetGadgetColor() for front & backcolor & #PB_Gadget_LineColor <br>
<br>

<b>HyperLinkGadget()</b> <br>
- Supports SetGadgetColor() for frontcolor (background is always transparent) <br>
- new Flag: #PB_Hyperlink_Underline - draw a line under the text (without the need for an underlined font) <br>
<br>

<b>ListIconGadget()</b> <br>
- Supports SetGadgetColor() for front and backcolor and #PB_Gadget_LineColor (for #PB_ListIcon_GridLines) <br>
- Supports SetGadgetItemColor() for front and backcolor (can be set for each cell individually) <br>
- Supports SetGadgetItemData() <br>
- The event to detected a checkbox change is now #PB_EventType_Change <br>
- Supports GetGadgetItemAttribute(#Gadget, 0, #PB_ListIcon_ColumnWidth, 2) ; return width of column 2 <br>
- Supports SetGadgetItemAttribute(#Gadget, 0, #PB_ListIcon_ColumnWidth, 100, 2) ; set width of column 2 to 100 <br>
- Supports GetGadgetItemText(#Gadget, -1, 2)             ; return header text for column 2 <br>
- Supports SetGadgetItemText(#Gadget, -1, "New Text", 2) ; change header text for column 2 <br>
<br>

<b>ListViewGadget()</b> <br>
- Supports SetGadgetColor() for front and backcolor (not for individual items) <br>
- Supports SetGadgetItemData() <br>
- new Flags: <br>
<blockquote>

#PB_ListView_Multiselect - allow multi selection <br>
#PB_ListView_ClickSelect - multiselect + clicking an item selects/deselects it <br>
</blockquote>

<br>

<b>MDIGadget()</b> <br>
- The child windows of the MDIGadget are no longer "GadgetItems", but real PB Windows. 
This means that you can use ANY command from the WindowLib with them (except StickyWindow()). This makes some of the MDIGadget 
features obsolete, therefore there are some changes: <br>
- The Gadget no longer sends any events: all close, resize, activate events are received as Window events <br>
- GetGadgetAttribute(), Get/SetGadgetItemAttribute, Get/SetGadgetItemState(), Get/SetGadgetItemText 
are all no longer supported. All this can be easily done through the Window lib commands. <br>
- RemoveGadgetItem() no longer supported, use CloseWindow(). <br>
<br>
The Commands useable with MDIGadget now are only these: (+ the whole window lib!) <br>
- ClearGadgetItemList() : closes all child windows <br>
- CountGadgetItems()    : get the number of child windows in the gadget <br>
- GetGadgetState()      : get the WindowID of the Window currently in the foreground of the gadget <br>
- SetGadgetState()      : set a specific window to the foreground or arrange the child windows (All like the old MDIGadget) <br>
- AddGadgetItem()       : create an MDI Child: works like this: <br>
<pre><font face="Courier New, Courier, mono"size="2">   AddGadgetItem(#MDI, #Window, Title$ [, ImageID [, Flags]])
     - #Window - Number for the new window (can be #PB_Any!)
     - Title$  - new window title
     - ImageID - Icon for the window (optional)
     - Flags   - Supports most of the flags for OpenWindow,
                 if none are specified, the default MDI flags are used. 
   Unsupported Flags: #PB_Window_Borderless, #PB_Window_ScreenCentered, #PB_Window_WindowCentered
</font></pre>
Note: you must now call CreateGadgetList() to add items to a MDI child, just like with normal windows. <br>
<br>
- SetGadgetColor()     can be used with #PB_Gadget_BackColor to set the MDI backcolor <br>
- SetGadgetAttribute() can be used with #PB_MDI_Image to set a background image, #PB_MDI_TileImage can set the tile mode of the image on or off <br>
<br>
<br>

<b>PanelGadget()</b> <br>
- added GetGadgetAttribute() with #PB_Panel_ItemWidth, #PB_Panel_ItemHeight (read-only) 
(there must be at least 1 tab in the panel for this to work) <br>
<br>

<b>ProgressBarGadget()</b> <br>
- supports SetGadgetColor() for front & backcolor  (not working with XP skins) <br>
- supports SetGadgetAttribute() with #PB_ProgressBar_Minimum, #PB_ProgressBar_Maximum <br>
<br>

<b>ScrollAreaGadget()</b> <br>
- supports SetGadgetColor() for backcolor <br>
- new Flag: #PB_ScrollArea_Center - when the inner size is smaller than the outer, the inner area will be centered automatically <br>
- new options for SetGadgetAttribute(): #PB_ScrollArea_X/#PB_ScrollArea_Y to read/set the current scroll pos. <br>
- now generates an event when being scrolled <br>
<br>

<b>ScrollBarGadget()</b> <br>
- Supports SetGadgetAttribute() with #PB_ScrollBar_Minimum, #PB_ScrollBar_Maximum, #PB_ScrollBar_PageLength <br>
<br>

<b>SpinGadget()</b> <br>
- supports SetGadgetColor for front & backcolor (to color the edit area) <br>
- supports SetGadgetAttribute() with #PB_Spin_Minimum, #PB_Spin_Maximum <br>
- New Flags: <br>
<blockquote>

#PB_Spin_ReadOnly - The StringGadget is not editable, the number is only changeable by the arrows <br>
#PB_Spin_Numeric  - The SpinGadget will automatically update the text with value of the state, so SetGadgetText is not needed. <br>
</blockquote>

- EventType values: <br>
<blockquote>

1 - the up button was pressed <br>
-1 - the down button was pressed <br>
#PB_EventType_Change - the text in the edit box was changed <br>
</blockquote>

<br>

<b>SplitterGadget()</b> <br>
- new flags for Get/SetGadgetAttribute(): #PB_Splitter_FirstGadget, #PB_Splitter_SecondGadget <br>
With GetGadgetAttribute(), they return the #Gadget Number of the stored Gadget <br>
With SetGadgetAttribute(), you can place a new Gadget in the Splitter. <br>
<br>
Note: The old Gadget will not be automatically freed! (it will be put out of the splitter and on the same window as the splitter) 
So if you do not want the old gadget to remain, remove it with FreeGadget() 
This allows you to switch Gadgets in a splitter without the need to re-create any of them. <br>
<br>
Note: You cannot have a Gadget in 2 Splitters at once. So to move a Gadget from one splitter to another, 
replace it in the first splitter first, and then put it in the second one. <br>
<br>

<b>StringGadget()</b> <br>
- supports SetGadgetColor() for front and backcolor <br>
<br>

<b>TextGadget()</b> <br>
- Supports SetGadgetColor() for front and backcolor <br>
<br>

<b>TrackBarGadget()</b> <br>
- supports SetGadgetAttribute() with #PB_TrackBar_Minimum, #PB_TrackBar_Maximum <br>
<br>

<b>TreeGadget()</b> <br>
- Supports SetGadgetColor() for front & backcolor & #PB_Gadget_LineColor <br>
- Supports SetGadgetItemColor() for front & backcolor <br>
- changed management of items completely. There are no longer any nodes, 
just a continuous list where each item has a "sublevel". The sublevels 
of all items define the tree structure like this: 
<pre><font face="Courier New, Courier, mono"size="2">   + sublevel 0
   +-+ sublevel 1
   | | sublevel 1
   | +-+ sublevel 2
   | | sublevel 1
   | sublevel 0
</font></pre>
- new parameter to AddGadgetItem: AddGadgetItem(#Gadget, Position, Text$ [, ImageID [, Flags]]) <br>
The "Flags" parameter is always required for TreeGadget and specifies the 
Sublevel in which to put this item. <br>
<br>
To create the above tree, you do this: 
<pre><font face="Courier New, Courier, mono"size="2"><font color="#006666">   AddGadgetItem</font>(<font color="#924B72">#TreeGadget</font>, -1, "sublevel 0", 0, 0)
<font color="#006666">   AddGadgetItem</font>(<font color="#924B72">#TreeGadget</font>, -1, "sublevel 1", 0, 1)
<font color="#006666">   AddGadgetItem</font>(<font color="#924B72">#TreeGadget</font>, -1, "sublevel 1", 0, 1)
<font color="#006666">   AddGadgetItem</font>(<font color="#924B72">#TreeGadget</font>, -1, "sublevel 2", 0, 2)
<font color="#006666">   AddGadgetItem</font>(<font color="#924B72">#TreeGadget</font>, -1, "sublevel 1", 0, 1)
<font color="#006666">   AddGadgetItem</font>(<font color="#924B72">#TreeGadget</font>, -1, "sublevel 0", 0, 0)    
</font></pre>
- new GetGadgetItemAttribute() with #PB_Tree_SubLevel (read-only) to get the sublevel of any item <br>
- <font color="red">removed</font>: OpenTreeGadgetNode() <br>
- <font color="red">removed</font>: CloseTreeGadgetNode() <br>
- <font color="red">removed</font>: TreeGadgetItemNumber()     - can be easily emulated by GadgetItemID() + a run trough the item list <br>
- <font color="red">removed</font>: CountTreeGadgetNodeItems() - can be easily emulated by comparing the sublevel of the items <br>
<br>


</body></html>